<?php

namespace App\Http\Controllers;

use App\Http\Models\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Redis;

/**
 * 登录
 * 模版的使用
 * 模版就是别人写好的静态页面
 * 使用别人的模版
 * 模版里面有视图（html）还有静态文件（css、js、image、font）
 * 把静态文件放在public
 * 把html放在视图目录（resources）
 * 例如：展示登录页面
 * 修改文件后缀
 * 配置路由、展示视图
 * 修改静态文件路径
 * 实现邮箱验证码
 *
 * 前端点击发送验证码（倒计时的功能、前端的setInterval()）
 * 后台会随机成功四位/六位验证码、发送到邮箱
 * 通过redis存储验证码
 * 登录进行验证验证码
 *
 *
 * Class LoginController
 * @package App\Http\Controllers
 */
class LoginController extends Controller
{
    public function login(){
        return view('admin/login');
    }

    /**
     * 进行登录
     */
    public function doLogin(Request $request){
        # 验证邮箱的验证码
        $email = $request->post('email');
        $code = $request->post('verifis');

        $redis_code = Redis::get($email);
        if (empty($redis_code)) {
            return "验证码已过期";
        }

        if ($redis_code != $code) {
            return  "验证码不正确";
        }

        # 判断邮箱帐号是否在数据库、创建模型、查询数据库
        $adminInfo = Admin::where('email',$email)->first();
        if (empty($adminInfo)) {
            return  "邮箱不存在";

        }

//        可以使用session保存登录的信息,'
        session(['userInfo'=> $adminInfo]);
        return redirect('/admin/index');//登录成功

    }


    /**
     * 发送验证码
     * 前端限制（1分钟只能点击1次）
     * 后端限制（1分钟只能发送一次）
     */
    public function sendCode(Request $request){
//        return "已经请求到了";// 调试

        $email = $request->post('email');//收件人
        // 生成随机的4位/6位数字
        $code = rand(1000,9999);
        // 发送到手机号/邮箱
        // 发送邮箱为例 有发送人/收件人
        // 登录qq邮箱或者其他邮箱、点击设置、账户开启发送邮箱的服务

        // 配置邮箱信息 env文件里面
        // 修改MAIL_HOST、
        //MAIL_PORT（25）、
        //MAIL_USERNAME（登录的帐号）
        //MAIL_PASSWORD（授权吗腾讯分配）
        //MAIL_FROM_ADDRESS 发送人（登录的帐号）
        // 发送邮箱 to()发送给谁 use 使用匿名函数外的变量

        $result = Mail::raw("你正在登录、你的验证是:{$code}",function ($message) use ($email) {
            $message->to($email)->subject("验证码");
        });
        if ($result == null) {
            # 缓存存储验证码 验证码一般都是5分钟
//            Redis::set('存储的键','存储的值');
//            Redis::setex("存储的键","存储的时间秒","存储的值")
            Redis::setex($email,300,$code);
            return ['code' => 200,'msg' => 'ok','data' => []];
        } else {
            return ['code' => 2001,'msg' => '发送失败','data' => []];
        }
    }


}
